package cool.lichuan.zabbix.service;

import com.alibaba.fastjson.JSONObject;
import cool.lichuan.zabbix.domain.graph.graph.GraphResult;
import cool.lichuan.zabbix.domain.graph.item.GraphItemResult;
import cool.lichuan.zabbix.domain.host.group.HostGroupResult;
import cool.lichuan.zabbix.domain.host.host.HostResult;
import cool.lichuan.zabbix.domain.host.hostinterface.HostInterfaceResult;
import cool.lichuan.zabbix.domain.problem.ProblemHost;
import cool.lichuan.zabbix.domain.problem.ProblemParam;
import cool.lichuan.zabbix.domain.problem.ProblemResult;
import cool.lichuan.zabbix.request.Request;

import java.util.HashMap;
import java.util.List;

/**
 * @author lichuan
 * @date 2021/12/17 13:39
 * @description
 */
public interface ZabbixApiService {
    /**
     * 获取问题
     *
     * @param params 请求参数
     * @return 返回
     */
    ProblemResult getProblem(HashMap<String, Object> params);
    //--------------------- 主机类API开始 -------------------------//

    /**
     * 获取主机接口列表
     *
     * @param params 参数 推荐传参：{"hostids": "30057"}查询ID为"30057"的主机使用的接口的所有数据
     * @return 返回
     */
    HostInterfaceResult getHostInterface(HashMap<String, Object> params);

    /**
     * 获取主机列表
     *
     * @param params 参数
     * @return 返回
     */
    HostResult getHosts(HashMap<String, Object> params);

    /**
     * 获取主机组
     *
     * @param params 参数
     * @return 返回
     */
    HostGroupResult getHostGroup(HashMap<String, Object> params);

    /**
     * 查询问题主机信息
     *
     * @param problemParam 问题参数
     * @return 返回
     */
    List<ProblemHost> getProblemHosts(ProblemParam problemParam);
    //--------------------- 主机类API开始 -------------------------//

    //--------------------- 图表类API开始 -------------------------//

    /**
     * 获取图表信息
     *
     * @param params 参数
     * @return 返回
     */
    GraphResult getGraph(HashMap<String, Object> params);

    /**
     * 获取图表监控信息
     *
     * @param params 参数
     * @return 返回
     */
    GraphItemResult getGraphItem(HashMap<String, Object> params);
    //--------------------- 图表类API结束 -------------------------//

    //--------------------- 公共接口开始 -------------------------//

    /**
     * 登录，获取auth
     */
    void login();

    /**
     * 发起请求
     *
     * @param request 请求信息
     * @return 返回
     */
    JSONObject call(Request request);

    /**
     * 解析返回类
     *
     * @param request 请求
     * @param clazz   解析类
     * @param <T>     泛型
     * @return 返回
     */
    <T> T call(Request request, Class<T> clazz);
    //--------------------- 公共接口结束 -------------------------//
}
